/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.genitus.drum.model

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.{JsonSerializer, SerializerProvider}

/**
  * Custom json serializer for stat data.
  *
  * @author gwjiang (gwjiang@iflytek.com), 2016/11/21.
  */
class StatSerializer extends JsonSerializer[StatData] {
  /**
    * @inheritdoc
    */
  override def serialize(stat: StatData, jgen: JsonGenerator, provider: SerializerProvider): Unit = {
    SerializerUtils.serializeStat(stat, jgen)
  }
}

/**
  * Utils for serialization.
  */
object SerializerUtils {
  /**
    * Serialize StatData.
    *
    * @param stat stat data.
    * @param jgen json generator.
    */
  def serializeStat(stat: StatData, jgen: JsonGenerator): Unit = {
    jgen.writeStartObject()

    // startTime
    jgen.writeFieldName("startTime")
    jgen.writeNumber(stat.startTime)
    // accepted
    jgen.writeFieldName("accepted")
    jgen.writeNumber(stat.accepted)
    // puts
    jgen.writeFieldName("puts")
    jgen.writeNumber(stat.puts)
    // takes
    jgen.writeFieldName("takes")
    jgen.writeNumber(stat.takes)
    // tps
    jgen.writeFieldName("tps")
    jgen.writeNumber(stat.tps)

    jgen.writeEndObject()
  }
}